package com.zy.crm.workbench.service.impl;

import com.zy.crm.exception.LoginFailException;
import com.zy.crm.exception.UpdateFileException;
import com.zy.crm.workbench.dao.ManageDao;
import com.zy.crm.workbench.domain.Manage;
import com.zy.crm.workbench.service.ManageService;
import com.zy.crm.utils.DateTimeUtil;
import com.zy.crm.utils.MD5Util;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author CYH

 */


// User类的service层 业务层用来处理业务,九不用在applicationContext写bean了
@Service
public class ManageServiceImpl implements ManageService {

    // UserDao层对象 通过Resource byName赋值
    @Resource
    private ManageDao manageDao;

    // 查询登录信息
    @Override
    public Manage queryManageLogin(String loginAct, String loginPwd, String ip) throws LoginFailException {
        //System.out.println("进入成功：login的service层");
        Manage manage = new Manage();

        // 设值登录账号和登录密码
        manage.setLoginAct(loginAct);

        // 登录密码通过MD5加密
        manage.setLoginPwd(MD5Util.getMD5(loginPwd));
        //System.out.println(manage);
        //进入这里失败了
        manage = manageDao.selectManageLogin(manage);
        //System.out.println("成功出来");
        //System.out.println(manage);
        if (manage == null){
            System.out.println("账号或密码错误！");
             // 验证用户信息是否符合要求
            throw new LoginFailException("账号或密码错误！");

            // 验证失效时间 当前系统时间大于失效时间
        }else if(DateTimeUtil.getSysTime().compareTo(manage.getExpireTime()) > 0){
            System.out.println("账号已经失效！");
            throw new LoginFailException("账号已经失效！");

            // 验证账号是否锁定
        }else if("0".equals(manage.getLockState())) {
            System.out.println("此账号已锁定！");

            throw new LoginFailException("此账号已锁定！");

            // 验证ip地址是否正确
        }
//测试
        else if(!manage.getAllowIps().contains(ip)){
            System.out.println("访问主机无权限，以阻止访问！");
            throw new LoginFailException("访问主机无权限，以阻止访问！");
        }

        // 全部通过则返回uer
        return manage;
    }

    // 查询所有用户姓名
    @Override
    public List<Manage> getManageList() {
        List<Manage> manages = manageDao.selectAllManage();

        return manages;
    }

    @Override
    public Manage getManageById(String id) {

        Manage manage = manageDao.selectManageById(id);
        return manage;
    }


//更新密码


    @Override
    public int updatePassword(String loginAct, String loginPwd,String newloginPwd,String newloginPwd2) throws UpdateFileException
    {
        System.out.println("进入成功：update层");
        Manage manage = new Manage();
        // 设值登录账号和登录密码
        manage.setLoginAct(loginAct);

        // 登录密码通过MD5加密
        manage.setLoginPwd(MD5Util.getMD5(loginPwd));
        manage.setNewloginPwd(MD5Util.getMD5(newloginPwd));
        manage.setNewloginPwd2(MD5Util.getMD5(newloginPwd2));
        // 新密码： 81dc9bdb52d04dc20036dbd8313ed055
        int i =0;
        i= manageDao.updateManage(manage);

//        System.out.println("i="+i);
//        System.out.println(manage);

        if (manage == null){
            System.out.println("账号密码错误");
            // 验证用户信息是否符合要求
         throw new UpdateFileException("账号或密码错误！");
            // 验证失效时间 当前系统时间大于失效时间
            //81dc9bdb52d04dc20036dbd8313ed055
            // 81dc9bdb52d04dc20036dbd8313ed055
        }else if(!newloginPwd2.equals(newloginPwd)){
            System.out.println("两次输入的密码不一致");
            throw new UpdateFileException("两次输入的密码不一致");
        }

        // 全部通过则返回uer
        return i;
    }


}
